﻿namespace HanoiTower
{
    internal class Program
    {
        /// <summary>
        /// 函数递归实现汉诺塔
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //设置层数
            Console.WriteLine("请输入层数");
            int Layor = Convert.ToInt16(Console.ReadLine());
            //调用函数
            Myfunction(Layor, 'A', 'B', 'C');
            Console.ReadKey();
        }
        /// <summary>
        /// 函数
        /// </summary>
        /// <param name="n"代表层数></param>
        /// <param name="A"代表圆盘初始所在柱子></param>
        /// <param name="B"代表起中转作用的柱子></param>
        /// <param name="C"代表移动到的目标柱子></param>
        static void Myfunction(int n, char A, char B, char C)
        {
            //最上面一层直接移动
            if (n == 1)
            {
                Console.WriteLine($"{n}:{A}->{C}");                
            }
            //其他层数分三个步骤
            else
            {
                //将上面n-1个圆盘移到B柱子
                Myfunction(n - 1, A, C, B);
                //将第n个圆盘移到C柱子
                Console.WriteLine($"{n}:{A}->{C}");
                //将上面n-1个圆盘移到C柱子
                Myfunction(n - 1, B, A, C);
            }    
        }
    }
}